#include<bits/stdc++.h> 
using namespace std;
//	给定一个非空的以R为根的树，并且每个结点Ti的权重都是Wi。R-L这条路的权重指的是R到L上所
//	有结点权重的和。现在给定任意一棵树，需要判断所有路权与给定数字相同的路径。
//1.每个输入都有一个测试用例，每个测试用例第一行为正整数N≤100，表示树总的结点个数；M<N，
//	表示非叶子结点的总数；0<S<2^30， 表示需要得到的权和大小。
//2.然后一行包括N个正整数，表示每个结点的权重Wi，Wi<1000
//3.然后M行，每行都是 ID K ID[1] ID[2].. ID[K]的格式。其中ID是给定的非叶子结点，K是它的
//	子结点个数，然后跟着一行子结点编号序列。所有编号都是两个数码组成的。
//4.为了方便起见，根结点编号为00
//5.对于每个测试用例，以非递增输出所有路权与S一样大的结点权重序列，每个序列都是从根到叶。
//6.树，DFS，排序
//这题的思路很简单，建树，深度优先搜索，求和，结果存到向量数组，排序向量数组的过程 
int weights[100];	//存储结点权重 
vector<int> sons[100];	//存储非叶子结点的子结点情况 
vector<int> paths[100];	//存储符合条件的路径 
vector<int> path;	//存储中间路径 
unordered_map<int, int> ID_i;	//建立ID和sons数组的i的对应情况 
int N,M,S;	
int count_ = 0;	//定义符合情况的路径条数 
int sum_ = 0;	//记录当前路权 
void DFS(int now){	//深度优先搜索，压入权重，增加路权，查看是否到底，到底就比较，不到底就继续递归，然后再弹出返回上一层 
	path.push_back(weights[now]);
	sum_ += weights[now];
	if(ID_i.find(now)!=ID_i.end()){
		int t = ID_i[now];
		for(unsigned int i = 0;i<sons[t].size();i++){
			DFS(sons[t][i]);
		}
	}
	else{
		if(sum_ == S){
			for(unsigned int i = 0;i<path.size();i++){
				paths[count_].push_back(path[i]);
			}
			count_++;
		}
	}
	path.pop_back();
	sum_ -= weights[now];
}
bool cmp(vector<int> a, vector<int> b){	//对比函数，取等长的部分，然后进行遍历，遇到不同的返回大的那条在前。如果都一样，那么返回false 
	unsigned int len = min(a.size(), b.size());
	for(unsigned int i = 0;i<len;i++){
		if(a[i]!=b[i]) return a[i]>b[i];
	}
	if(a.size()==len) return a.size()>b.size();
	else return false;
}
int main(){
	cin>>N>>M>>S;
	for(int i = 0;i<N;i++){
		scanf("%d", &weights[i]);	//读入权重 
	}
	for(int i = 0;i<M;i++){	//读入树结点的形状 
		int ID, K, t;
		scanf("%02d %d", &ID, &K); 
		ID_i[ID] = i;
		for(int j = 0;j<K;j++){
			scanf("%02d", &t);
			sons[i].push_back(t);
		}
	}
	DFS(0);	//DFS，从根节点开始 
	sort(paths, paths+count_,cmp);	//DFS结束后得到了若干路径，然后对路径进行排序 
	for(int i = 0;i<count_;i++){	//遍历路径情况，输出结果 
		for(unsigned int j = 0;j<paths[i].size();j++){
			printf("%d", paths[i][j]);
			if(j==paths[i].size()-1) printf("\n");
			else printf(" ");
		}
	}
	return 0; 
} 